package com.librelato.tela;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.librelato.bean.HistoricoPedidoVendaBean;
import com.librelato.bean.PedidoVendaBean;
import com.librelato.bean.UsuarioBean;
import com.librelato.negocio.PedidoVendaServico;
import com.librelato.negocio.interfaces.IServicoGenerico;
import com.librelato.util.Ferramentas;

@ManagedBean
@ViewScoped
public class PedidoVendaTela extends TelaAbstrata {

	@ManagedProperty(value = "#{usuario}")
	private UsuarioBean usuario;

	private PedidoVendaServico<PedidoVendaBean> pedidoVendaServico;

	private List<PedidoVendaBean> listaPedidoVenda;

	private Map<String, String> param;

	private String dataDeFiltro;

	private String dataAteFiltro;

	private String numDeFiltro;

	private String numAteFiltro;

	private String filialFiltro;

	private String linhaFiltro;

	private String htmlExpansion;

	private String opcaoFilial;

	public PedidoVendaTela() {
		usuario = usuario == null ? (UsuarioBean) ((HttpSession) FacesContext
				.getCurrentInstance().getExternalContext().getSession(false))
				.getAttribute("usuario") : usuario;
		pedidoVendaServico = new PedidoVendaServico<PedidoVendaBean>();
		listaPedidoVenda = new ArrayList<PedidoVendaBean>();
		htmlExpansion = "";

		dataAteFiltro = Ferramentas.formataData(new Date().getTime(),
				"dd/MM/yy");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		calendar.add(Calendar.DATE, -500);
		dataDeFiltro = Ferramentas.formataData(calendar.getTime().getTime(),
				"dd/MM/yy");
		opcaoFilial = "FATURAMENTO";
	}

	public void filtrarPedidos() {
		try {
			param = new HashMap<String, String>();
			if (filialFiltro != null && !"".equals(filialFiltro)) {
				param.put("FILIAL", filialFiltro);
			}
			if (dataDeFiltro != null && !"".equals(dataDeFiltro)) {
				param.put("DATADE", dataDeFiltro);
			}
			if (dataAteFiltro != null && !"".equals(dataAteFiltro)) {
				param.put("DATAATE", dataAteFiltro);
			}
			if (numDeFiltro != null && !"".equals(numDeFiltro)) {
				param.put("NUMDE", numDeFiltro);
			}
			if (numAteFiltro != null && !"".equals(numAteFiltro)) {
				param.put("NUMATE", numAteFiltro);
			}
			if (linhaFiltro != null && !"".equals(linhaFiltro)) {
				param.put("LINHA", linhaFiltro);
			}
			if (opcaoFilial != null && !"".equals(opcaoFilial)) {
				param.put("OPCAOFILIAL", opcaoFilial);
			}
			listaPedidoVenda = this.pedidoVendaServico.buscaPedidos(param);
			/*if (listaPedidoVenda.size() == 0 && numDeFiltro != null
					&& !"".equals(numDeFiltro) && numAteFiltro != null
					&& !"".equals(numAteFiltro)
					&& numAteFiltro.equals(numDeFiltro)) {
				param.put("FILIAL", filialFiltro);
				param.put("NUMPV", numDeFiltro);
				listaPedidoVenda = this.pedidoVendaServico
						.buscaPedidoPortalAntigo(param);
			}
			*/

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void atualizaExpansion(PedidoVendaBean pv) {

		try {

			StringBuilder sb = new StringBuilder();
			StringBuilder sbCabecalho = new StringBuilder();
			List<HistoricoPedidoVendaBean> listaHistorico;
			if (pv.getHistorico() == null) {
				listaHistorico = this.pedidoVendaServico
						.buscaHistoricoPedidoVenda(pv);
			} else {
				listaHistorico = pv.getHistorico();
			}

			Collections.sort(listaHistorico);
			sb.append("<table class='ui-panelgrid ui-widget' style='margin-top:20px' role='grid'>");

			sbCabecalho.append("<tr class='ui-widget-header' role='row'>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Filial</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Nº PV</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Data</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Status</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Filial de Produção</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Usuário</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Observação</td>");
			sbCabecalho.append("</tr>");
			preecheHtmlTabela(sb, sbCabecalho, listaHistorico);
			sb.append("</table>");
			htmlExpansion = sb.toString();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private void preecheHtmlTabela(StringBuilder sb, StringBuilder sbCabeca,
			List<HistoricoPedidoVendaBean> listaHistorico) {

		sb.append("<thead class='ui-panelgrid-header'>");
		sb.append(sbCabeca.toString());
		sb.append("	</thead>");

		sb.append("<tbody>");
		for (int i = 0; i < listaHistorico.size(); i++) {
			sb.append("<tr class='ui-widget-content' role='row'>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getFilOri());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getNumeroPvOp());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(Ferramentas.formataData(listaHistorico.get(i)
					.getDataEmissao().getTime(), "dd/MM/yy HH:mm"));
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getPosicao());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getFilProd());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getUsuario());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getObservacao());
			sb.append("</td>");
			sb.append("</tr>");
		}
		sb.append("</tbody>");

	}

	public void imprimePedidoVenda(PedidoVendaBean pedido) {
		try {

			this.pedidoVendaServico.imprimePedidoVenda(pedido,
					usuario.getCodigo() + pedido.getNumero(),usuario);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("rawtypes")
	@Override
	protected IServicoGenerico getServico() {
		return this.pedidoVendaServico;
	}

	public PedidoVendaServico<PedidoVendaBean> getPedidoVendaServico() {
		return pedidoVendaServico;
	}

	public void setPedidoVendaServico(
			PedidoVendaServico<PedidoVendaBean> pedidoVendaServico) {
		this.pedidoVendaServico = pedidoVendaServico;
	}

	public List<PedidoVendaBean> getListaPedidoVenda() {
		return listaPedidoVenda;
	}

	public void setListaPedidoVenda(List<PedidoVendaBean> listaPedidoVenda) {
		this.listaPedidoVenda = listaPedidoVenda;
	}

	public Map<String, String> getParam() {
		return param;
	}

	public void setParam(Map<String, String> param) {
		this.param = param;
	}

	public String getDataDeFiltro() {
		return dataDeFiltro;
	}

	public void setDataDeFiltro(String dataDeFiltro) {
		this.dataDeFiltro = dataDeFiltro;
	}

	public String getDataAteFiltro() {
		return dataAteFiltro;
	}

	public void setDataAteFiltro(String dataAteFiltro) {
		this.dataAteFiltro = dataAteFiltro;
	}

	public String getNumDeFiltro() {
		return numDeFiltro;
	}

	public void setNumDeFiltro(String numDeFiltro) {
		this.numDeFiltro = numDeFiltro;
	}

	public String getNumAteFiltro() {
		return numAteFiltro;
	}

	public void setNumAteFiltro(String numAteFiltro) {
		this.numAteFiltro = numAteFiltro;
	}

	public String getFilialFiltro() {
		return filialFiltro;
	}

	public void setFilialFiltro(String filialFiltro) {
		this.filialFiltro = filialFiltro;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}

	public String getHtmlExpansion() {
		return htmlExpansion;
	}

	public void setHtmlExpansion(String htmlExpansion) {
		this.htmlExpansion = htmlExpansion;
	}

	public String getLinhaFiltro() {
		return linhaFiltro;
	}

	public void setLinhaFiltro(String linhaFiltro) {
		this.linhaFiltro = linhaFiltro;
	}

	public String getOpcaoFilial() {
		return opcaoFilial;
	}

	public void setOpcaoFilial(String opcaoFilial) {
		this.opcaoFilial = opcaoFilial;
	}

}
